/*
 * @(#)NetUtils.java
 *
 * Copyright 2012 by ShenY BIS, All rights reserved.
 */

package com.bis.framework.util.business.chinamobile;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.bis.framework.base.entity.BaseEntity;
import com.bis.framework.util.common.TextUtil;

/**
 * NetUtils
 * 
 * 客户端和服务器之间交互的工具类。
 * 
 * @author BIS 2012-12-24
 */
public class NetUtils
{

    /**
     * UTF-8编码方式
     */
    public static final String UTF_8_ENCODE = "UTF-8";
    /**
     * LOG日志
     */
    protected static Logger    logger       = Logger.getLogger(NetUtils.class);

    // #start 【传输数据取得】

    /**
     * 取得通讯请求数据 Bean
     * 
     * @return
     * @throws Throwable
     */
    public static Object get_Entity(Object objP)
    {
        // 定义读取
        BufferedReader responseReader = null;
        try
        {
            // 当正确响应时处理数据
            StringBuffer objSB = new StringBuffer();
            // 数据读取
            String readLine;
            // 处理响应流，必须与服务器响应流输出的编码一致
            responseReader = new BufferedReader(new InputStreamReader(ServletActionContext.getRequest().getInputStream(), NetUtils.UTF_8_ENCODE));
            while ((readLine = responseReader.readLine()) != null)
            {
                objSB.append(readLine);
            }
            // 关闭处理流
            responseReader.close();
            // 接收信息
            Object objR = JsonUtil.readJson2Entity(objSB.toString(), objP);
            //设置返回值
            return objR;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            // 写日志
            logger.error("Server NetWork Error Is : ", ex);
            return null;
        }
        finally
        {
            if (responseReader != null)
            {
                try
                {
                    responseReader.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
                responseReader = null;
            }
        }
    }

    /**
     * 设置通讯返回数据报文体
     * 
     * @return
     * @throws Exception
     */
    public static boolean set_Entity(BaseEntity entity)
    {        
        try
        {
            String strR = null;
            // 转换为MAP-->JSON串
            if (null != entity)
            {
                try
                {
                    strR = JsonUtil.writeEntityJSON(entity);
                }
                catch (Exception ex)
                {
                    //	错误JSON
                    strR = "heapError:系统解析错误！";
                    // 设置编码
                    ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
                    // 设置返回值
                    ServletActionContext.getResponse().getWriter().write(strR);
                    //	提交缓冲并清空
                    ServletActionContext.getResponse().getWriter().flush();
                    //	打印错误信息
                    ex.printStackTrace();
                    // 写日志
                    logger.error("Server NetWork Error Is : ", ex);
                    // 设置返回值
                    return false;
                }
            }
            // 设置编码
            ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
            // 设置返回值
            ServletActionContext.getResponse().getWriter().write(strR);
            //	提交缓冲并清空
            ServletActionContext.getResponse().getWriter().flush();
            // 设置返回值
            return true;
        }
        catch (Exception ex)
        {
            //	打印错误信息
            ex.printStackTrace();
            // 写日志
            logger.error("Server NetWork Error Is : ", ex);
            // 设置返回值
            return false;
        }
    }
    // #end

    // #start 【参数设定与取得】
    /**
     * 设置通讯返回数据报文头
     * 
     * @throws UnsupportedEncodingException
     */
    public static void set_Header(HttpServletResponse httpResponse, String name, String value)
    {
        httpResponse.addHeader(name, value);
    }

    /**
     * 取得通讯请求数据报文头
     * 
     * @param request
     * @param name
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String get_Header(HttpServletRequest httpRequest, String name)
    {
        if (TextUtil.isEmpty(httpRequest.getHeader(name)))
        {
            return null;
        }
        else
        {
            return httpRequest.getHeader(name);
        }
    }

    // #end
}
